<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <script>
        /**
         * 语法固定： try....catch  try尝试的意思  catch 捕获
         * 1. try catch 捕获到错误之后，后续代码可以继续执行
         * 2. catch 可以将错误信息捕获到， e是一个错误对象，有message和stack两个属性
         * 3. 抛出错误之后，在后续的try里面的代码不会执行
         * 4. try不能捕获语法错误。其他三种类型错误可以捕获
         * 5. 允许使用 throw手动抛出错误
         * 6. 抛出任意类型的数据 
         */


        // 如果出现错误，代码就会阻塞不会继续向下执行？
        try{// 可以捕获到执行过程中的错误，即便有错误，也不会阻塞。而是会将错误在catch中进行捕获
            //其他三种类型错误可以捕获
            // new Array(-10);
            // console.log(aaaa);
            // let aaa = 1;
            // aaa();

            // 为什么语法错误不能捕获呢? js解析器在执行代码之前，首先会检查语法错误，如果有语法错误直接报错。
            // 其他类型错误,可以通过语法检查，代码从上到下执行时，才发现有错。所以可以捕获
            // let a = ;

            // 可以手动抛出错误 throw [抛、扔]
            // throw new Error('我是抛出的错误');
            // throw '我是错误字符串'
            throw 888;

            // 异常后续的代码不在执行，直接跳转到 catch执行
            console.log('try');
        }catch(e){// 捕获到的错误是一个对象。有两个属性 message：错误信息。 stack：错误栈：标注了错误的文件和位置
            console.dir(e);
            console.log(typeof e);
        }
        // try。。。catch处理后，后续代码仍可执行
        console.log(1);


         
         
    </script>
</body>
</html>